package com.ruoyi.system.service.impl;

import com.ruoyi.common.utils.Base64Utils;
import com.ruoyi.common.utils.jm.EncryptWithJMJ;
import com.ruoyi.common.utils.jm.JMJUtils;
import com.ruoyi.common.utils.jm.SM4Util;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.JmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 加解密方法
 */
@Service
public class JmServiceImpl implements JmService {

    @Autowired
    private SysConfigMapper sysConfigMapper;

    @Autowired
    private ISysConfigService configService;

    @Override
//    @Cacheable(value = "HelloWorldCache", key = "#data")
    public String getDecryptString(String data) {
        try {
            if (data == null || "".equals(data.trim())) {
                return null;
            }
            if (!data.contains("JMJ_")) {
                String key=   configService.selectConfigByKey("sys_SM4_key");
                return new String(SM4Util.decryptByEcb0(Base64Utils.ESSGetBase64Decode(data), key.getBytes()));
            } else {
//                加密机解密
//                加密机ip
             String jmjIp=   configService.selectConfigByKey("sys.encryptorServer.ip");
//                加密机端口
                String jmjPort=   configService.selectConfigByKey("sys.encryptorServer.port");
//                加密机密码
                String jmjPaw=   configService.selectConfigByKey("sys.encryptorServer.password");

                return EncryptWithJMJ.DecryptIt(data, jmjIp, Integer.valueOf(jmjPort),jmjPaw);

            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    //    加密方法
    public String getEncryptString(String data) {
        try {
            if (data == null || "".equals(data.trim())) {
                return null;
            }

//            是否使用加密机
            String isOfJmj=   configService.selectConfigByKey("sys_encryptorServer");
//            密钥
            String key=   configService.selectConfigByKey("sys_SM4_key");

            if ("0".equals(isOfJmj)) {

                return JMJUtils.getEncryptString(data, key);
            } else {
//                加密机ip
                String jmjIp=   configService.selectConfigByKey("sys.encryptorServer.ip");
//                加密机端口
                String jmjPort=   configService.selectConfigByKey("sys.encryptorServer.port");
//                加密机密码
                String jmjPaw=   configService.selectConfigByKey("sys.encryptorServer.password");

                return EncryptWithJMJ.EncryptIt(data, jmjIp, Integer.valueOf(jmjPort),jmjPaw);

            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


}
